package edu.cuit.avatar.service.bean;

import edu.cuit.avatar.dao.UserDao;
import edu.cuit.avatar.service.UserService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/**
 * @author <a href="mailto:1020zhaodan@163.com">Adan</a>
 * @version 1.0
 * @date 2025/8/14 10:43
 */
@Service
public class UserServiceBean implements UserService {
    @Resource private UserDao dao;

    /**
     * spring事务的传播行为(带有事务方法间相互调用策略)
     *      REQUIRED(默认):如果当前存在事务，加入该事务；如果当前不存在事务，会新建事务
     *      SUPPORTS: 支持当前事务，如果当前没有事务，就以非事务方式执行。
     *      MANDATORY: 支持当前事务,如果当前没有事务，抛出异常 IllegalTransactionStateException
     *      REQUIRES_NEW: 新建事务，如果当前存在事务，挂起当前事务
     *      NEVER: 以非事务方式执行，如果当前存在事务，则抛出异常。
     *      NOT_SUPPORTED: 以非事务方式执行，如果当前存在事务，则挂起当前事务(查询)。
     *      NESTED: 嵌套事务
     */
    @Transactional(propagation = Propagation.NESTED) //默认的传播行为为:REQUIRED
    @Override
    public void updateScore(Integer userId, int score) {
        dao.updateScoreById(userId, score);
        //System.out.println(10 / 0);
    }
}
